package pe.com.bn.sach.dao.impl;
   
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import com.ibatis.sqlmap.client.SqlMapClient;
import pe.com.bn.sach.dao.ClienteDAO;
import pe.com.bn.sach.dao.PersonaDAO;
import pe.com.bn.sach.dao.Direccion84DAO;
import pe.com.bn.sach.domain.Bnchf13Expediente;
import pe.com.bn.sach.domain.Bnchf01Persona;
import pe.com.bn.sach.domain.Bnchf02Cliente;
import pe.com.bn.sach.domain.BnhbReniec;
import pe.com.bn.sach.domain.Bnchf12Familiar;
import pe.com.bn.sach.domain.Bnchf12FamiliarId;
import pe.com.bn.sach.domain.Bnchf67DireccionPers;

public class ClienteImpl implements ClienteDAO {
	 
	private static Logger depurador = Logger.getLogger(ClienteImpl.class.getName());
	
	protected SqlMapClient sqlMap = null;
	PersonaDAO personaDAO; 
	Direccion84DAO direccion84DAO; 
	  
	
    private static Logger log = Logger.getLogger(ClienteImpl.class.getName());
	
    ///getExpedienteGeneradoPrecalificado
  
    
    
    /*  String enTramite = (String)sqlMap.queryForObject("sqlExpediente.countExpedienteEnTramite",bnchf13Expediente); */
    
    
	public String getCountExpedienteEnTramitePersona(Long idPersona) throws Exception
	{
		String rpta="0";
		Map map=new HashMap();
		
		map.put("idPersona",idPersona);
		
		
		String count="-1";
		String exp="";
		List lcountEnTramitePersona1=(List)sqlMap.queryForList("sqlExpediente.countExpedienteEnTramitePersona",map);
		if(lcountEnTramitePersona1==null){
			count="0";
		}else{
			for (int i = 0; i < lcountEnTramitePersona1.size(); i++) {
				if (exp.equals(""))
					exp = ((Bnchf13Expediente)lcountEnTramitePersona1.get(i)).getF13IdExpediente();
				else
					exp+= ", " +((Bnchf13Expediente)lcountEnTramitePersona1.get(i)).getF13IdExpediente();
			}
			count=lcountEnTramitePersona1.size() + "";
		};
		
		
		if(Integer.parseInt(count)<=0){
			rpta="1";
			return rpta;
		}
		
		rpta=exp;
		return rpta;
		
	}
	public String getCountExpedienteEnTramite(Long idCliente) throws Exception
	{
		Bnchf13Expediente bnchf13Expediente=new Bnchf13Expediente();
		bnchf13Expediente.getBnchf02Cliente().setF02IdCliente(idCliente);
		return (String)sqlMap.queryForObject("sqlExpediente.countExpedienteEnTramite",bnchf13Expediente);
		
	}
	
	public String getcountEstadoBandeja(Bnchf13Expediente bnchf13Expediente) throws Exception
	{
		
		String estadoBandeja = (String)sqlMap.queryForObject("sqlExpediente.countEstadoBandeja",bnchf13Expediente);
     return estadoBandeja;
		
	}
	
	public List getExpedienteGeneradoPrecalificado(Long idCliente) throws Exception
	{
		Map map=new HashMap();		
		map.put("idCliente",idCliente);
		return sqlMap.queryForList("sqlExpediente.getExpedienteGeneradoPrecalificado",map);
		
	}
	
	
	public boolean getVerificaGeneradoPrecalificado(Long idCliente) throws Exception
	{
		boolean rpta=false;
		HashMap hm  = new HashMap();		
		hm.put("f02IdCliente",idCliente);
		String enGeneradoPrecalificado = (String)sqlMap.queryForObject("sqlExpediente.existeClienteEnGeneradoCalificado",hm);
		if(enGeneradoPrecalificado==null){enGeneradoPrecalificado="0";}
		if(Integer.parseInt(""+enGeneradoPrecalificado)>0){
			rpta=true;
		}
		return rpta;
		
	}
	
	public int ModificarEstadoCivilCliente(Bnchf02Cliente Bnchf02Cliente,Bnchf01Persona Bnchf01Persona,Bnchf67DireccionPers Bnchf67DireccionPers) throws Exception{
		
		/* variables globales del metodo */
		
		String usuarioString=Bnchf01Persona.getF01IdUsuaModi();
		Long idCliente=Bnchf02Cliente.getF02IdCliente();
		String estadoCivilForm=""+Bnchf01Persona.getF01StdoCivil();
		
		
		/**/
		int respuesta=0;
		
		//countExpedienteCliente
		Bnchf13Expediente bnchf13Expediente=new Bnchf13Expediente();
		bnchf13Expediente.getBnchf02Cliente().setF02IdCliente(idCliente);
		
        String enTramite = (String)sqlMap.queryForObject("sqlExpediente.countExpedienteEnTramite",bnchf13Expediente);
        
        if(enTramite==null) enTramite = "0";
           
        if(Integer.parseInt(enTramite+"")>=1){
        	 respuesta=8;
             return respuesta;
        }
        
        if (enTramite.equals("0")){
        	
        	String nroGenrados = (String)sqlMap.queryForObject("sqlExpediente.countExpedienteGenerado",bnchf13Expediente);
        	
        	if(nroGenrados==null)nroGenrados="0";
        	
        	if(Integer.parseInt(nroGenrados)==1){
        		String getidExpediente ="";
        		try{
        			getidExpediente=(String)sqlMap.queryForObject("sqlExpediente.getidExpediente",bnchf13Expediente);
        			
        		}catch(Exception e){
        			log.error(e.getMessage());
	               	 respuesta=11;
	                 return respuesta;
        		}
        		bnchf13Expediente.setF13IdExpediente(getidExpediente);
        		String estadoBandeja = (String)sqlMap.queryForObject("sqlExpediente.countEstadoBandeja",bnchf13Expediente);
        		
        		if(estadoBandeja==null)
        			return 11; // El expediente no se encuentra en el u.p. de Pre- calificacion o Calificacion
        			
        		if(Integer.parseInt(estadoBandeja)==20)
        			return 12; // El espediente se encuentra en el u.p Aprobacion Crediticia
        		
        		
        		String idEstadoCivilCliente = (String)sqlMap.queryForObject("sqlExpediente.estadoCivildelCliente",bnchf13Expediente);
        		if(idEstadoCivilCliente==null){idEstadoCivilCliente="0";}

        		
        		
        		if(idEstadoCivilCliente.equals(estadoCivilForm)){     
        		
        			this.ActualizarCliente(Bnchf02Cliente,Bnchf01Persona,Bnchf67DireccionPers);
        			respuesta=0;
        			return respuesta;
        			
        		}
        		
        		if(idEstadoCivilCliente.equals("2")){      // 1.0.1.2 En el caso de seleccionar casado/conviviente a SOLTERO/VIUDO/DIVORCIADO
        			String conyugeActivo = (String)sqlMap.queryForObject("sqlExpediente.verificaConyugeActivo",bnchf13Expediente);
        			if(conyugeActivo==null)conyugeActivo="0";
        			
        			
        			if(Integer.parseInt(conyugeActivo)<=0){ //* Verificar primero que no debe tener familiares ACTIVOS asignado  y solicitar que primero los elimine
        					String noParticipaIngresoFamiliar = (String)sqlMap.queryForObject("sqlExpediente.verificaConyugeNOParticipaIngresoFamiliar",bnchf13Expediente);
        					if(noParticipaIngresoFamiliar==null) noParticipaIngresoFamiliar="0";
        				
        					
        					
        					if(Integer.parseInt(noParticipaIngresoFamiliar+"")==1){
        						//ActualizarEstadoCivilCliente
        						bnchf13Expediente.setF13EstdCivil(new Long(""+estadoCivilForm));
        						String idPersona= (String)sqlMap.queryForObject("sqlExpediente.getidPersona",bnchf13Expediente);
        						bnchf13Expediente.getBnchf01Persona().setF01IdPersona(new Long(""+idPersona));
        						bnchf13Expediente.setF13IdExpediente(""+getidExpediente);
        						bnchf13Expediente.setF13IdUsuaModi(usuarioString);
        						Bnchf01Persona.setF01StdoCivil(new Long(""+estadoCivilForm));
        						this.ActualizarCliente(Bnchf02Cliente,Bnchf01Persona,Bnchf67DireccionPers);
								bnchf13Expediente.setF13EstdCivil(new Long(""+estadoCivilForm));
								bnchf13Expediente.getBnchf01Persona().setF01IdPersona(null);
        						sqlMap.update("sqlExpediente.ActualizarEstadoCivilClienteExpediente",bnchf13Expediente);
        						}
        					else respuesta=7;
        				}else{
        					
        					if(!idEstadoCivilCliente.equals(estadoCivilForm))
        					respuesta=5;
        				} 
        		}
        		//   1.0.1.3 En el caso de seleccionar Soltero/viudo/divorcuiado  a CASADO/CONVIVIENTE}
        		if(!idEstadoCivilCliente.equals("2")){
							//ActualizarEstadoCivilCliente
							bnchf13Expediente.setF13EstdCivil(new Long(""+estadoCivilForm));
							String idPersona= (String)sqlMap.queryForObject("sqlExpediente.getidPersona",bnchf13Expediente);
							bnchf13Expediente.getBnchf01Persona().setF01IdPersona(new Long(""+idPersona));
							bnchf13Expediente.setF13IdExpediente(""+getidExpediente);
							bnchf13Expediente.setF13IdUsuaModi(usuarioString);
							Bnchf01Persona.setF01StdoCivil(new Long(""+estadoCivilForm));
							this.ActualizarCliente(Bnchf02Cliente,Bnchf01Persona,Bnchf67DireccionPers);
							bnchf13Expediente.setF13EstdCivil(new Long(""+estadoCivilForm));
							bnchf13Expediente.getBnchf01Persona().setF01IdPersona(null);
							sqlMap.update("sqlExpediente.ActualizarEstadoCivilClienteExpediente",bnchf13Expediente);
							//respuesta=4;
							if(estadoCivilForm.equals("2"))
								respuesta=6;																		
		        }
        	
        	}else{
            	if(Integer.parseInt(nroGenrados)==0){
            		
					String idEstadoCivilCliente = (String)sqlMap.queryForObject("sqlExpediente.estadoCivildelCliente",bnchf13Expediente);
					if(idEstadoCivilCliente==null){idEstadoCivilCliente="0";}
					
            		if(idEstadoCivilCliente.equals(estadoCivilForm)){     
                			this.ActualizarCliente(Bnchf02Cliente,Bnchf01Persona,Bnchf67DireccionPers);
                			respuesta=0;
                			return respuesta;
                	}
						if(idEstadoCivilCliente.equals("2")){
								
								String conyugeActivo = (String)sqlMap.queryForObject("sqlExpediente.verificaConyugeActivo",bnchf13Expediente);
			        			if(conyugeActivo==null)conyugeActivo="0";
			        			if(Integer.parseInt(conyugeActivo)<=0){
			        				bnchf13Expediente.setF13EstdCivil(new Long(""+estadoCivilForm));
			        				Bnchf01Persona.setF01StdoCivil(new Long(""+estadoCivilForm));
									this.ActualizarCliente(Bnchf02Cliente,Bnchf01Persona,Bnchf67DireccionPers);
			        			}else{
			        				if(!idEstadoCivilCliente.equals(estadoCivilForm))
			        				respuesta=5;
			        				}
						}
					
		        		if(!idEstadoCivilCliente.equals("2")){
		        			     
		        					bnchf13Expediente.setF13EstdCivil(new Long(""+estadoCivilForm));
									Bnchf01Persona.setF01StdoCivil(new Long(""+estadoCivilForm));
									this.ActualizarCliente(Bnchf02Cliente,Bnchf01Persona,Bnchf67DireccionPers);
									
									if(estadoCivilForm.equals("2"))
									respuesta=6;
		        		}
            	      }else{
                   	 respuesta=10; //existe el cliente con dos expedientes generados
                     return respuesta;
                	}
        	}
        
        }
		
	    //4 edireccionar la pagina para el registro de la conyuge. (formulario o lista)
	    //3 dbe haber un mensaje que diga que la conyuge del cliente participa del ingreso del familiar 
	    //2 quiere decier que deber eliminar su conyuge primero
		//6 llevar a lista de familiar del cliente	
		//7 conyuge paraticipa del ingres del familiar 
     
       return  respuesta;
    }
	
	
	public void setDireccion84DAO(Direccion84DAO direccion84DAO) {
		this.direccion84DAO = direccion84DAO;
	}

	public void setPersonaDAO(PersonaDAO personaDAO) {
		this.personaDAO = personaDAO;
	}

	public void setSqlMap(SqlMapClient sqlMap) {
		this.sqlMap = sqlMap;
	}
	
	public List listClientesinParam() throws Exception{ 
		return sqlMap.queryForList("sqlCliente.listaClientesinparam");
	}
	
	public List listCliente(Bnchf02Cliente c) throws Exception{ 

			
		return sqlMap.queryForList("sqlCliente.listaClienteconparam",c);
	}
	
	public List listFamiliar(Bnchf02Cliente c) throws Exception{ 
		return sqlMap.queryForList("sqlCliente.listaBuscarFamilar",c);
	}
	

	public int clientesoltero(Bnchf02Cliente bnchf02Cliente) throws Exception{    
		
		
        try {
        	
        	String id = (String)sqlMap.queryForObject("sqlCliente.ClienteSoltero",bnchf02Cliente);
            if(id==null)
                  id = "0";
             return Integer.parseInt(id);
        } catch (Exception e) {
            throw new Exception("Error clientesoltero " + e);
        }
    }
	
	public Long MAXIDCLIENTE() throws Exception{    
        try {
            String id = (String)sqlMap.queryForObject("sqlCliente.MaxCliente");
            if(id==null)
            	id = "0";
           
             return new Long(id);
        } catch (Exception e) {
            throw new Exception("Error en PersonaImpl de MAXIDCLIENTE: " + e);
        }
    }
	
	public int ExisteCliente(Bnchf02Cliente bnchf02Cliente) throws Exception{    
        try {
        	String id = (String)sqlMap.queryForObject("sqlCliente.ExisteCliente",bnchf02Cliente);
            if(id==null)
            	id = "0";
            return Integer.parseInt(id);
        } catch (Exception e) {
            throw new Exception("ExisteCliente: " + e);
        }
    }
	
	
	public Long MAXIDPERSONA() throws Exception{    
        try {
            String id = (String)sqlMap.queryForObject("sqlPersona.MaxPersona");
            if(id==null)
            	id = "0";   
             return new Long(id);
        } catch (Exception e) {
            throw new Exception("Error en PersonaImpl de MAXIDCLIENTE: " + e);
        }
    }
	
	
	public int validaupdate(Bnchf12Familiar Bnchf12Familiar) throws Exception{    
        try {
            String id = (String)sqlMap.queryForObject("sqlFamiliar12.validaupdate",Bnchf12Familiar);
            if(id==null)
            	id = "0";   
             return  Integer.parseInt(id);
        } catch (Exception e) {
            throw new Exception("Error en PersonaImpl de MAXIDCLIENTE: " + e);
        }
    }
	
	
	
	public Bnchf02Cliente guardaCliente(
			Bnchf02Cliente Bnchf02Cliente,
			Bnchf01Persona Bnchf01Persona
			) throws Exception{
        	//Guardando Cliente
        	Long id = this.MAXIDCLIENTE();
        	int i=0;
        	/**
        	 * Tiene una transaccion padre
        	 */
        		
        			Bnchf02Cliente.setF02IdCliente(id);
        			Bnchf02Cliente.setBnchf01Persona(Bnchf01Persona);
        			
        			
        			sqlMap.insert("sqlCliente.GuardaCliente",Bnchf02Cliente);
        		
        		

        	
        	
            return Bnchf02Cliente;
    }
	
	public Bnchf02Cliente forinsert(
			Bnchf02Cliente Bnchf02Cliente
			) throws Exception{
		try{
			sqlMap.startTransaction();
        			sqlMap.insert("sqlCliente.forinsert",Bnchf02Cliente);
        			sqlMap.commitTransaction();
			} catch (Exception e) {
    			e.printStackTrace();
    			throw e;
    		 } finally {
    		    sqlMap.endTransaction();
    		}
            return Bnchf02Cliente;
    }
	
	public Bnchf02Cliente forinsertcommit(
			Bnchf02Cliente Bnchf02Cliente
			) throws Exception{
		try{
			sqlMap.startTransaction();
        	sqlMap.insert("sqlCliente.forinsert",Bnchf02Cliente);
        	sqlMap.commitTransaction();
			} catch (Exception e) {
    			e.printStackTrace();
    			throw e;
    		 } finally {
    		    sqlMap.endTransaction();
    		}
            return Bnchf02Cliente;
    }
	
	
	
	public void ActualizadatosCliente(
			Bnchf02Cliente Bnchf02Cliente
			
			) throws Exception{ 
		   
		            
		            sqlMap.update("sqlCliente.ActualizaCliente",Bnchf02Cliente);
		         
		    }
	
	
	
	
	public Bnchf02Cliente RegistraCliente(
			Bnchf02Cliente Bnchf02Cliente,
			Bnchf01Persona Bnchf01Persona,
			//Bnchf03Trabajo Bnchf03Trabajo,
			Bnchf67DireccionPers Bnchf67DireccionPers
			) throws Exception{ 
		Bnchf67DireccionPers.setF67TpoDirecc(new Long("1"));
		Bnchf67DireccionPers.setF67IdUsuaCrea(Bnchf01Persona.getF01IdUsuaCrea());
		
		try{
			sqlMap.startTransaction();	
		Bnchf02Cliente.setF02IdCliente(new Long(0));

		
			Bnchf01Persona = personaDAO.GuardaPersona_cli(Bnchf01Persona);
			
       
        	direccion84DAO.GuardaDireccionPer(Bnchf01Persona, Bnchf67DireccionPers);
     
        	
        	Bnchf02Cliente = this.guardaCliente(Bnchf02Cliente, Bnchf01Persona);        
        	sqlMap.commitTransaction();        
        	} catch (Exception e) {
    			e.printStackTrace();
    			throw e;
    		 } finally {
    		    sqlMap.endTransaction();
    		  }
        	if(Bnchf02Cliente.getF02IdCliente()==new Long(0))
        	{
        		return Bnchf02Cliente;
        	}
        
            return Bnchf02Cliente;
    }
	


	
	
	public void ActualizarCliente(
			Bnchf02Cliente Bnchf02Cliente,
			Bnchf01Persona Bnchf01Persona,
			//Bnchf03Trabajo Bnchf03Trabajo,
			Bnchf67DireccionPers Bnchf67DireccionPers
			) throws Exception{ 
		   
		    try{
	    		sqlMap.startTransaction();
		    //Guardando Persona
	    		
	    		
			personaDAO.ActualizadatosPersona(Bnchf01Persona);
			
			
			
        	//Guardando Direccion		       
			Bnchf67DireccionPers.getId().setBnchf01Persona(Bnchf01Persona);
        	direccion84DAO.ActualizadatosDireccion(Bnchf67DireccionPers );
        	//Guardando Cliente
        	this.ActualizadatosCliente(Bnchf02Cliente);
        	
        	sqlMap.commitTransaction();
 		    } catch (Exception e) {
 				e.printStackTrace();
 				throw e;
 			 } finally {
 			    sqlMap.endTransaction();
 			  }
    }
	
	
	public void GuardaFamiliar(
			Bnchf02Cliente Bnchf02Cliente,
			Bnchf01Persona Bnchf01Persona,
			//Bnchf03Trabajo Bnchf03Trabajo,
			Bnchf12Familiar Bnchf12Familiar,
			Bnchf67DireccionPers Bnchf67DireccionPers
			) throws Exception{
		Bnchf12Familiar.setF12IdUsuaCrea(Bnchf02Cliente.getF02IdUsuaCrea());
		Bnchf67DireccionPers.setF67TpoDirecc(new Long("1"));
		Bnchf67DireccionPers.setF67IdUsuaCrea(Bnchf02Cliente.getF02IdUsuaCrea());
		try{
			
			sqlMap.startTransaction();
		Long idparentesco = Bnchf12Familiar.getBnchf62Parentesco().getF62IdTpoParent();
		/**
		 * Metodo Guardar Familiar
		 */

		
		/**
		 * Preguntamos si el familiar que se va guardar  es cliente 
		 * para de esta manera no registrar nada y solo registrar en la tabla familiar
		 */
		
		
		Long idTitular = Bnchf02Cliente.getF02IdCliente();
		Bnchf02Cliente.setF02IdCliente(null);
		
		
		Bnchf02Cliente bnchf02ClienteTitular = new Bnchf02Cliente();
		bnchf02ClienteTitular.setF02IdCliente(idTitular);
		bnchf02ClienteTitular = this.getCliente(bnchf02ClienteTitular);
		personaDAO.casado(bnchf02ClienteTitular.getBnchf01Persona());
		
		
		 
		List lcliente = this.listCliente(Bnchf02Cliente);
		if(lcliente.size() !=0)
		{
			
		
		
			
			Bnchf13Expediente bnchf13Expediente = new  Bnchf13Expediente ();
			bnchf13Expediente = (Bnchf13Expediente)lcliente.get(0);
			Bnchf02Cliente clientencontrado = new Bnchf02Cliente();
			clientencontrado = bnchf13Expediente.getBnchf02Cliente();
			
			
			/**
			 * SI este familiar ya es cliente se registrara en la tabla familiar
			 */
			
			
				//	Guardando Familiar 1 del titular
				Bnchf12FamiliarId Bnchf12FamiliarId = new Bnchf12FamiliarId();
				Bnchf12FamiliarId.setBnchf02Cliente(bnchf02ClienteTitular);
				Bnchf12FamiliarId.setBnchf01Persona(clientencontrado.getBnchf01Persona());
				Bnchf12Familiar.setId(Bnchf12FamiliarId);        
				
				if(validaupdate(Bnchf12Familiar)==0)
				sqlMap.insert("sqlFamiliar12.GuardaFamiliar",Bnchf12Familiar);
				else
				{
					Bnchf12Familiar.setF12StdoParent(new Long(1));
					sqlMap.insert("sqlFamiliar12.ActualizaEstadoParentesco",Bnchf12Familiar);
				}
				//Guardando Familiar 2 del conyugue       
				Bnchf12FamiliarId = new Bnchf12FamiliarId();
				Bnchf12FamiliarId.setBnchf02Cliente(clientencontrado);
				Bnchf12FamiliarId.setBnchf01Persona(bnchf02ClienteTitular.getBnchf01Persona());
				Bnchf12Familiar.setId(Bnchf12FamiliarId);     
				Bnchf12Familiar.getBnchf62Parentesco().setF62IdTpoParent(idparentesco);
				
				if(validaupdate(Bnchf12Familiar)==0)
				{
					sqlMap.insert("sqlFamiliar12.GuardaFamiliar",Bnchf12Familiar);
				}
				else
				{
					Bnchf12Familiar.setF12StdoParent(new Long(1));
					sqlMap.insert("sqlFamiliar12.ActualizaEstadoParentesco",Bnchf12Familiar);
				}
				
		
				
		}
		
		
		else 
		{
			
		/**
		 * Si el familiar no es cliente buscamos si esta persona existe en la bd para registrarla como familiar al cliente titular
		 */	
			Bnchf01Persona bnchf01PersonaEncontrada = new Bnchf01Persona();
			bnchf01PersonaEncontrada = personaDAO.getPersona(Bnchf01Persona);
			if(bnchf01PersonaEncontrada.getF01IdPersona()!=null ){
			
				//	Guardando Direccion
				//if(direccion84DAO.GuardaDireccionPer(Bnchf01Persona, Bnchf67DireccionPers, sqlMap)==0)
				//return 0;
				//	Guardando Familiar 1
				Bnchf12FamiliarId Bnchf12FamiliarId = new Bnchf12FamiliarId();
				Bnchf12FamiliarId.setBnchf02Cliente(bnchf02ClienteTitular);
				Bnchf12FamiliarId.setBnchf01Persona(Bnchf01Persona);
				Bnchf12Familiar.setId(Bnchf12FamiliarId);   
				if(validaupdate(Bnchf12Familiar)==0)
				{
					sqlMap.insert("sqlFamiliar12.GuardaFamiliar",Bnchf12Familiar);
				}
				else
				{
					Bnchf12Familiar.setF12StdoParent(new Long(1));
					
					sqlMap.insert("sqlFamiliar12.ActualizaEstadoParentesco",Bnchf12Familiar);
				}
				
			
				
				
			}
			
			else
			{
				
				
				/**
				 * si la persona no es cliente ni persona en la bd se registrara como nueva 
				 */
				
				
				//Guardando Persona
				
				Bnchf01Persona = personaDAO.GuardaPersona_cli(Bnchf01Persona);
			
			
				//	Si tiene Bduc registramos al familiar como Cliente
				//beta para familiares
				
				
				if(Bnchf02Cliente.getF02CinternoCic().length()!=0 )
				{
					//    		Guardando Direccion
					direccion84DAO.GuardaDireccionPer(Bnchf01Persona, Bnchf67DireccionPers);
						
					//	Guardando Cliente
							        
					Bnchf02Cliente = this.guardaCliente(Bnchf02Cliente, Bnchf01Persona);
						
					//	Guardando Familiar 1 del titular
					Bnchf12FamiliarId Bnchf12FamiliarId = new Bnchf12FamiliarId();
					Bnchf12FamiliarId.setBnchf02Cliente(bnchf02ClienteTitular);
					Bnchf12FamiliarId.setBnchf01Persona(Bnchf01Persona);
					Bnchf12Familiar.setId(Bnchf12FamiliarId);        
					
					
					sqlMap.insert("sqlFamiliar12.GuardaFamiliar",Bnchf12Familiar);
					//Guardando Familiar 2 del conyugue        	
					Bnchf12FamiliarId = new Bnchf12FamiliarId();
					Bnchf12FamiliarId.setBnchf02Cliente(Bnchf02Cliente);
					Bnchf12FamiliarId.setBnchf01Persona(bnchf02ClienteTitular.getBnchf01Persona());
					Bnchf12Familiar.setId(Bnchf12FamiliarId);     
					Bnchf12Familiar.getBnchf62Parentesco().setF62IdTpoParent(idparentesco);
					
					sqlMap.insert("sqlFamiliar12.GuardaFamiliar",Bnchf12Familiar);
					
				}else{
					//	Guardando Direccion
					direccion84DAO.GuardaDireccionPer(Bnchf01Persona, Bnchf67DireccionPers);
						
					//	Guardando Familiar 1
					Bnchf12FamiliarId Bnchf12FamiliarId = new Bnchf12FamiliarId();
					Bnchf12FamiliarId.setBnchf02Cliente(bnchf02ClienteTitular);
					Bnchf12FamiliarId.setBnchf01Persona(Bnchf01Persona);
					Bnchf12Familiar.setId(Bnchf12FamiliarId);   
					
					
					sqlMap.insert("sqlFamiliar12.GuardaFamiliar",Bnchf12Familiar);
				}
				
				
				
			
		}
			
			
		}
		sqlMap.commitTransaction();
		
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		 } finally {
		    sqlMap.endTransaction();
		  }
		try{
		 Bnchf01Persona = personaDAO.getPersona(Bnchf01Persona);
		 personaDAO.casado(Bnchf01Persona);}catch(Exception e){}
    }
	
	public void ActualizarFamiliar(
			Bnchf02Cliente bnchf02Cliente,
			Bnchf01Persona bnchf01Persona,
			//Bnchf03Trabajo bnchf03Trabajo,
			Bnchf67DireccionPers bnchf67DireccionPers
			) throws Exception{ 
		  
		    try{
			sqlMap.startTransaction();
		    //Guardando Persona
			
			personaDAO.ActualizadatosPersona(bnchf01Persona);
   
			bnchf67DireccionPers.getId().setBnchf01Persona(bnchf01Persona);
        	direccion84DAO.ActualizadatosDireccion(bnchf67DireccionPers);
        	
        	if(bnchf02Cliente!=null )
        	{
        	
        	this.ActualizadatosCliente(bnchf02Cliente);
        	}
        	sqlMap.commitTransaction();
		    } catch (Exception e) {
				e.printStackTrace();
				throw e;
			 } finally {
			    sqlMap.endTransaction();
			  }
    }

	
	
	
	public int ActualizarEstado(
			Bnchf02Cliente Bnchf02Cliente
			)throws Exception{
		        try {
		        	sqlMap.startTransaction();
		           
		            sqlMap.update("sqlCliente.ActualizaEstado",Bnchf02Cliente);
		            sqlMap.commitTransaction();
		            return 1;
		        } catch (Exception e) {
		        	depurador.error(e);
		        
	 		} finally {
	 				sqlMap.endTransaction();
	 			}
		        return 0;
	    }
	
	
	public List ListFamiliar(Bnchf12Familiar Bnchf12Familiar)throws Exception{
		return sqlMap.queryForList("sqlFamiliar12.listaFamiliar",Bnchf12Familiar);
    }
	
	public Bnchf02Cliente getCliente(Bnchf02Cliente Bnchf02Cliente)throws Exception{
		List l = sqlMap.queryForList("sqlCliente.Cliente",Bnchf02Cliente);
		if(l!=null)if(l.size()!=0)
		Bnchf02Cliente = (Bnchf02Cliente)l.get(0);
		return Bnchf02Cliente;
    }
	 
	
	public List SearchPopup(Bnchf02Cliente Bnchf02Cliente)throws Exception{
		
		if(Bnchf02Cliente.getBnchf01Persona().getF01TpoDoc()==null){Bnchf02Cliente.getBnchf01Persona().setF01TpoDoc(new Long("0"));}
		
		return sqlMap.queryForList("sqlCliente.buscarPopupCliente",Bnchf02Cliente);
    }

	public Bnchf02Cliente getFindPopupCliente(Bnchf02Cliente Bnchf02Cliente)throws Exception{
		List l = sqlMap.queryForList("sqlCliente.findPopupCliente",Bnchf02Cliente);
		Bnchf02Cliente = (Bnchf02Cliente)l.get(0);
		return Bnchf02Cliente;
    }	

	public Bnchf02Cliente getFindConyugue(Bnchf02Cliente Bnchf02Cliente)throws Exception{
		List l = sqlMap.queryForList("sqlCliente.findConyugue",Bnchf02Cliente);
		Bnchf02Cliente = (Bnchf02Cliente)l.get(0);
		return Bnchf02Cliente;
    }	 
	
	public Bnchf02Cliente getFindPopupPersona(Bnchf02Cliente Bnchf02Cliente)throws Exception{
		List l = sqlMap.queryForList("sqlCliente.findPopupPersona",Bnchf02Cliente);
		Bnchf02Cliente = (Bnchf02Cliente)l.get(0);
		return Bnchf02Cliente;
    }
	public Bnchf02Cliente FindPopup(Bnchf02Cliente Bnchf02Cliente)throws Exception{
		
		if(Bnchf02Cliente.getBnchf01Persona().getF01TpoDoc()==null){Bnchf02Cliente.getBnchf01Persona().setF01TpoDoc(new Long("0"));}
		
		return (Bnchf02Cliente)((List)sqlMap.queryForList("sqlCliente.findPopupCliente",Bnchf02Cliente)).get(0);
    }
	
	public BnhbReniec buscarFoto(String dni) throws Exception{
		BnhbReniec bnchf29Reniec = new BnhbReniec();
		Map parameter =  new HashMap();
		parameter.put("nroDNI",dni);
		bnchf29Reniec = (BnhbReniec)sqlMap.queryForObject("sqlReniec.buscarFoto",parameter);
		return bnchf29Reniec;
	}
	
	public BnhbReniec buscarFirma(String dni) throws Exception{
		BnhbReniec bnchf29Reniec = new BnhbReniec();
		Map parameter =  new HashMap();
		parameter.put("nroDNI",dni);
		bnchf29Reniec = (BnhbReniec)sqlMap.queryForObject("sqlReniec.buscarFirma",parameter);
		return bnchf29Reniec;
	}


	
	
	
	
}
